#include <iostream>

using namespace std;
//继承同名静态成员处理方式
//1、访问子类同名成员   直接访问即可
//2、访问父类同名成员   需要加作用域
class Base{
public:
    static int a;
    static void func(){
        cout<<"Base:static void func()的调用！"<<endl;
    }
    static void func(int num){
        cout<<"Base:static void func(int)的调用！"<<endl;
    }
};
class Son:public Base{
public:
    static int a;
    static void func(){
        cout<<"Son:static void func()的调用！"<<endl;
    }
};
int Base::a=10;
int Son::a=20;
//同名静态成员属性
void test1(){
    //1、通过对象访问数据
    Son son;
    cout<<"Son:a="<<son.a<<endl;
    cout<<"Base:a="<<son.Base::a<<endl;
    //2、通过类名访问数据
    cout<<"Son:a="<<Son::a<<endl;
    //第一个::代表通过类名的方式访问，第二个::代表访问父类作用域下的数据
    cout<<"Base:a="<<Son::Base::a<<endl;
}
//同名静态成员函数
void test2(){
    //1、通过对象访问函数
    Son son;
    son.func();
    son.Base::func();
    //2、通过类名访问函数
    Son::func();
    //出现同名，子类会隐藏掉父类中所有同名成员函数，需要加作作用域访问
    Son::Base::func();
    //Son::func(100);
    Son::Base::func(100);
}
int main() {
    test1();
    test2();
    return 0;
}